import {
	defineStore
} from 'pinia'
import {
	login,
	logout
} from "@/api/user.js"


// 定义数据

// 第一个参数是应用程序中 store 的唯一 id
export const useUsersStore = defineStore('users', {
	// 其它配置项
	//  Login.vue => store.username
	// 定义要存储的数据
	state: () => {
		return {
			username: "defaultName",
			token: " ",
			avator: " ",
			intro: ""
		}
	},
	// 获取数据 => 类似计算属性 （获取数据时，有一些其他的操作时）
	// 最新操作 recent
	getters: {
		// 普通函数
		// getUsername: function() {
		// 	return this.username.toLowerCase() 
		// },
		// getToken: function() {
		// 	return this.token.toLowerCase() 
		// },
		// getAvator: function() {
		// 	return this.avator.toLowerCase() 
		// },
	},
	actions: {
		setUsername: function(username) {
			this.username = username
		},
		setToken: function(token) {
			this.token = token
		},
		setAvator: function(avator) {
			this.avator = avator
		},
		setIntro: function(intro) {
			this.intro = intro
		},
		setAvator: function(avator) {
			this.avator = avator
		},
		clearUserData: function() {
			this.username = ""
			this.token = ""
			this.intro = ""
			this.avator = ""
		},


		login: function(values) {
			// 请求接口
			return new Promise((resolve) => {
				login(values)
					.then(res => {
						console.log("success", res)
						if (res.code == 0) {
							this.setUsername(res.data.username);
							this.setToken(res.data.token);
						}

						return resolve(res);
					})
					.catch(err => {
						console.log(err)
						return "store-error"
					})
			});
		},
		// 负责调用登录验证接口+保存数据
		logout: function() {
			return new Promise((resolve, reject) => {
				// 请求后端退出接口
				logout({
						"token": this.token
					})
					.then(res => {
						if (res.code == 0) {
							// 后端退出成功，清除本地数据
							this.clearUserData()
							return resolve(res);
						} else {
							return reject("store-error")
						}
						// resolve 成功
					})
					.catch(err => {
						console.log(err)
						// reject 出错了
						return reject("store-error")
					})
			})
		}
	},
	// 使用该插件，开启数据缓存
	persist: {
		//这里存储默认使用的是session
		enabled: true,
		strategies: [{
			//key：数据存储在浏览器中的key
			key: 'store_user',
			//更改默认存储，我更改为localStorage
			storage: localStorage,
		}]
	}
})
